# 编译器和编译选项
CC = gcc
CFLAGS = -Wall -Wextra -I.
LDFLAGS = -lpthread

# 目标文件
SER_OBJS = server.o func.o dlist.o
CLI_OBJS = client.o menu.o dlist.o

# 默认目标
all: ser cli

# 服务器目标
ser: $(SER_OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

# 客户端目标
cli: $(CLI_OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

# 生成目标文件的规则
server.o: server.c server.h comm.h dlist.h
	$(CC) $(CFLAGS) -c $< -o $@

func.o: func.c server.h comm.h dlist.h
	$(CC) $(CFLAGS) -c $< -o $@

dlist.o: dlist.c dlist.h
	$(CC) $(CFLAGS) -c $< -o $@

client.o: client.c client.h comm.h dlist.h
	$(CC) $(CFLAGS) -c $< -o $@

menu.o: menu.c client.h comm.h dlist.h
	$(CC) $(CFLAGS) -c $< -o $@

# 清理目标
clean:
	rm -f ser cli $(SER_OBJS) $(CLI_OBJS)

# 伪目标
.PHONY: all clean